/**
 * @author Roger Wu
 * @version 1.0
 */
(function($){
     $.fn.extend({jresize:function(options) {
        if (typeof options == 'string') {
                if (options == 'destroy') 
                    return this.each(function() {
                            var dialog = this;        
                            $("div[class^='resizable']",dialog).each(function() {
                                $(this).hide();
                            });
                    });
        }
        return this.each(function(){
            var dialog = $(this);            
            var resizable = $(".resizable");
            $("div[class^='resizable']",dialog).each(function() {
                var bar = this;
                $(bar).mousedown(function(event) {
                    $.pdialog.switchDialog(dialog);
                    $.resizeTool.start(resizable, dialog, event, $(bar).attr("tar"));
                    return false;
                }).show();
            });
        });
    }});
    $.resizeTool = {
        start:function(resizable, dialog, e, target) {
            $.pdialog.initResize(resizable, dialog, target);
            $.data(resizable[0], 'layer-drag', {
                options: $.extend($.pdialog._op, {target:target, dialog:dialog,stop:$.resizeTool.stop})
            });
            $.layerdrag.start(resizable[0], e, $.pdialog._op);
        },
        stop:function(){
            var data = $.data(arguments[0], 'layer-drag');
            $.pdialog.resizeDialog(arguments[0], data.options.dialog, data.options.target);
            $("body").css("cursor", "");
            $(arguments[0]).hide();
        }
    };
    $.layerdrag = { 
        start:function(obj, e, options) {
            if (!$.layerdrag.current) {
                $.layerdrag.current = {
                    el: obj,
                    oleft: parseInt(obj.style.left) || 0,
                    owidth: parseInt(obj.style.width) || 0,
                    otop: parseInt(obj.style.top) || 0,
                    oheight:parseInt(obj.style.height) || 0,
                    ox: e.pageX || e.screenX,
                    oy: e.pageY || e.clientY
                };
                $(document).bind('mouseup', $.layerdrag.stop);
                $(document).bind('mousemove', $.layerdrag.drag);
            }
            return $.layerdrag.preventEvent(e);
        },
        drag: function(e) {
                if (!e) var e = window.event;
                var current = $.layerdrag.current;
                var data = $.data(current.el, 'layer-drag');
                var lmove = (e.pageX || e.screenX) - current.ox;
                var tmove = (e.pageY || e.clientY) - current.oy;
                if((e.pageY || e.clientY) <= 0 || (e.pageY || e.clientY) >= ($(window).height() - $(".dialogHeader", $(data.options.dialog)).outerHeight())) return false;
                var target = data.options.target;    
                var width = current.owidth;    
                var height = current.oheight;        
                if (target != "n" && target != "s") {
                    width += (target.indexOf("w") >= 0)?-lmove:lmove;
                }
                if (width >= $.pdialog._op.minW) {
                    if (target.indexOf("w") >= 0) {
                        current.el.style.left = (current.oleft + lmove) + 'px';
                    }
                    if (target != "n" && target != "s") {
                        current.el.style.width = width + 'px';
                    }
                }
                if (target != "w" && target != "e") {
                    height += (target.indexOf("n") >= 0)?-tmove:tmove;
                }
                if (height >= $.pdialog._op.minH) {
                    if (target.indexOf("n") >= 0) {
                        current.el.style.top = (current.otop + tmove) + 'px';
                    }
                    if (target != "w" && target != "e") {
                        current.el.style.height = height + 'px';
                    }
                }
                return $.layerdrag.preventEvent(e);
        },     
        stop: function(e) {
                var current = $.layerdrag.current;
                var data = $.data(current.el, 'layer-drag');
                $(document).unbind('mousemove', $.layerdrag.drag);
                $(document).unbind('mouseup', $.layerdrag.stop);
                if (data.options.stop) {
                        data.options.stop.apply(current.el, [ current.el ]);
                }
                $.layerdrag.current = null;
                return $.layerdrag.preventEvent(e);
        },
        preventEvent:function(e) {
                if (e.stopPropagation) e.stopPropagation();
                if (e.preventDefault) e.preventDefault();
                return false;
        }
    };
})(jQuery);